package com.gome.exception;

import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;

public class GlobalExceptionDatas {

    /** 用户未登录系统或Session已过期. */
    public static final String COMM_ERR_CODE_NO_LOGIN = "TY000000";

    /** 异常编号 - 调用的业务方法名称不存在，请确认编写的代码是否有误. */
    public static final String COMM_ERR_CODE_NO_METHOD = "TY000001";

    /** 异常编号 - 调用的业务方法不能被访问，请确认是否有权限调用该方法. */
    public static final String COMM_ERR_CODE_ILL_ACCESS = "TY000002";

    /** 异常编号 - 执行PDF打印失败. */
    public static final String COMM_ERR_CODE_PDF_PRINT = "TY000003";

    /** 异常编号 - 执行数据库访问异常. */
    public static final String COMM_ERR_CODE_DB_ACCESS = "TY000004";

    /** 异常编号 - 未进行处理的异常. */
    public static final String COMM_ERR_CODE_FAILD_DEFINE = "TY000005";

    /** 异常编号 - 生成编码时，请求参数内容不正确. */
    public static final String COMM_ERR_CODE_FAILD_CODE_BM_PARAM = "TY000006";

    /** 异常编号 - 生成编码时，获取不到正确的最大序列号. */
    public static final String COMM_ERR_CODE_CODE_BM_SERIAL = "TY000007";

    /** 异常编号 - 执行MD5加密算法出错. */
    public static final String COMM_ERR_MD5_ECRYPT = "TY000008";

    /** 异常编号 - 执行文件加密算法出错. */
    public static final String COMM_ERR_ECRYPT_FILE = "TY000009";

    /** 异常编号 - 执行文件解密算法出错. */
    public static final String COMM_ERR_DECRYPT_FILE = "TY000010";

    /** 异常编号 - 执行加密算法出错. */
    public static final String COMM_ERR_ECRYPT = "TY000011";

    /** 异常编号 - 执行解密算法出错. */
    public static final String COMM_ERR_DECRYPT = "TY000012";

    /** 异常编号 - 未配置统一工作平台服务器信息. */
    public static final String COMM_ERR_GZTFWQ_NOT_EXISTS = "TY000013";

    /** 异常编号 - 对XML文件进行XSLT转换出错. */
    public static final String COMM_ERR_XSLT_TRANSFORM = "TY000014";

    /** 异常编号 - 对XML文件进行XSD校验出错. */
    public static final String COMM_ERR_XSD_VALIDATE = "TY000015";

    /** 异常编号 - XML文件未通过XSD校验. */
    public static final String COMM_ERR_XSD_VALIDATE_ERRS = "TY000016";

    /** 异常编号 - 构建树结构时，给定的节点未按要求放置. */
    public static final String COMM_ERR_FAILED_TREE = "TY000017";

    /** 异常编号 - 指定的目录不是有效的目录 */
    public static final String COMM_ERR_FAILED_DIR = "TY000018";

    /** 异常编号 - 不能创建指定的目录. */
    public static final String COMM_ERR_FAILED_CREATE_DIR = "TY000019";

    /** 异常编号 - 从FTP下载文件失败. */
    public static final String COMM_ERR_DOWNLOAD_FILE = "TY000020";

    /** 异常编号 - 通过Excel模板生成打印Excel文件失败. */
    public static final String COMM_ERR_MEM_EXCEL_TEMP = "TY000021";

    /** 异常编号 - 将文件流写入到文件中失败. */
    public static final String COMM_ERR_WRITE_FILE = "TY000022";
    /** 异常编号 - 读取远程文件失败. */
    public static final String COMM_ERR_READ_URL = "TY000023";
    /** 异常编号 - 读取文件内容失败. */
    public static final String COMM_ERR_READ_FILE = "TY000024";
    /** 异常编号 - 复制文件失败. */
    public static final String COMM_ERR_COPY_FILE = "TY000025";
    /** 异常编号 - 压缩文件失败. */
    public static final String COMM_ERR_ZIP_FILE = "TY000026";
    /** 异常编号 - 删除文件失败. */
    public static final String COMM_ERR_DELETE_FILE = "TY000027";

    /** 异常编码 - 生产人员未登录系统或Session过期 */
    public static final String ERR_CODE_SCRY_TIMEOUT = "GZT70002";

    //权限模块
    /** 异常编码 - 添加用户信息 失败. */
    public static final String ERR_CODE_INSERT_USER = "QXGL010001";
    /** 异常编码 - 更新用户信息 失败. */
    public static final String ERR_CODE_UPDATE_USER = "QXGL010002";
    /** 异常编码 - OA账号已存在 */
    public static final String ERR_CODE_EXIST_OA = "QXGL010003";
    /** 异常编码 - 此OA账号已添加 */
    public static final String ERR_CODE_OA_ALREADY_ADD = "QXGL010004";
    /** 异常编码 - 查询用户信息失败 */
    public static final String ERR_CODE_QUERY_USER = "QXGL010005";
    /** 异常编码 - 此账号在后台管理系统中未配置 */
    public static final String ERR_CODE_OAUSRE_NOT_CONFIG = "QXGL010006";
    /** 异常编码 - 此账号在OA用户信息中未找到 */
    public static final String ERR_CODE_NOT_FOUND_IN_OA = "QXGL010007";
    /** 异常编码 - 更新用户密码失败 */
    public static final String ERR_CODE_UPDATE_PASSWORD = "QXGL010008";
    /** 异常编码 - OA账号为空 */
    public static final String ERR_CODE_NULL_OA = "QXGL010009";
    /** 异常编码 - 修改用户信息失败 */
    public static final String ERR_CODE_UPDATE_USER_INFO = "QXGL010010";

    /** 异常编码 - 添加角色信息 失败. */
    public static final String ERR_CODE_INSERT_ROLE = "QXGL020001";
    /** 异常编码 - 更新角色信息 失败. */
    public static final String ERR_CODE_UPDATE_ROLE = "QXGL020002";
    /** 异常编码 - 删除角色信息 失败. */
    public static final String ERR_CODE_DELETE_ROLE = "QXGL020003";
    /** 异常编码 - 查询角色信息 失败. */
    public static final String ERR_CODE_QUERY_ROLE = "QXGL020004";
    /** 异常编码 - 此角色名称已存在. */
    public static final String ERR_CODE_EXIST_ROLE_NAME = "QXGL020005";
    /** 异常编码 - 角色编码为空. */
    public static final String ERR_CODE_NULL_ROLL_BM = "QXGL020006";
    /** 异常编码 - 角色编码有误. */
    public static final String ERR_CODE_ERROR_ROLL_BM = "QXGL020007";
    /** 异常编码 - 此角色名称为空. */
    public static final String ERR_CODE_NULL_ROLE_NAME = "QXGL020008";

    /** 异常编码 - 添加角色菜单信息 失败. */
    public static final String ERR_CODE_INSERT_ROLEMENU = "QXGL030001";
    /** 异常编码 - 删除角色菜单信息 失败. */
    public static final String ERR_CODE_DELETE_ROLEMENU = "QXGL030002";

    /** 异常编码 - 添加菜单信息 失败. */
    public static final String ERR_CODE_INSERT_MENU = "QXGL040001";
    /** 异常编码 - 更新菜单信息 失败. */
    public static final String ERR_CODE_UPDATE_MENU = "QXGL040002";
    /** 异常编码 - 删除菜单信息 失败. */
    public static final String ERR_CODE_DELETE_MENU = "QXGL040003";
    /** 异常编码 - 查询菜单信息 失败. */
    public static final String ERR_CODE_QUERY_MENU = "QXGL040004";
    /** 异常编码 - 菜单名称已存在. */
    public static final String ERR_CODE_EXIST_MENU_NAME = "QXGL040005";
    /** 异常编码 - 菜单名称不存在. */
    public static final String ERR_CODE_NOT_EXIST_MENU_NAME = "QXGL040006";
    /** 异常编码 - 菜单名称不为空. */
    public static final String ERR_CODE_NULL_MENU_NAME = "QXGL040007";
    /** 异常编码 - 菜单编码重复. */
    public static final String ERR_CODE_REPEAT_MENU_BM = "QXGL040008";
    /** 异常编码 - 菜单编码为空. */
    public static final String ERR_CODE_NULL_MENU_BM = "QXGL040009";

    /** 异常编码 - 用戶名不存在. */
    public static final String ERR_CODE_NOT_EXIST_LOGIN_NAME = "QXGL050001";
    /** 异常编码 - 密码不正确. */
    public static final String ERR_CODE_NOT_CORRECT_PASSWORD = "QXGL050002";
    /** 异常编码 - 用户名为空. */
    public static final String ERR_CODE_NULL_LOGIN_NAME = "QXGL050003";
    /** 异常编码 - 密码为空. */
    public static final String ERR_CODE_NULL_PASSWORD = "QXGL050004";

    /** 异常编码 - 发送邮件出错. */
    public static final String ERR_CODE_SEND_EMAIL = "QXGL060001";
    /** 异常编码 - 用户没有此系统权限. */
    public static final String ERR_CODE_NO_PERM = "QXGL060002";

    /** 异常编码 - 添加用户角色出错. */
    public static final String ERR_CODE_ADD_USERROLE = "QXGL070001";
    /** 异常编码 - 用户角色编码为空 */
    public static final String ERR_CODE_NULL_ROLEBM = "QXGL070002";

    /** 异常编码 - 通过key查询配置信息出错. */
    public static final String ERR_CODE_QUERY_CONFIG_BY_KEY = "QXGL080001";
    /** 异常编码 - 更新配置信息出错. */
    public static final String ERR_CODE_UPDATE_CONFIG = "QXGL080002";
    /** 异常编码 - 通过服务器地址查询服务器地址信息. */
    public static final String ERR_CODE_QUERY_FWQADD_BY_ADD = "QXGL080003";
    /** 异常编码 - 此服务器没有邮件发送的权限. */
    public static final String ERR_CODE_NOT_PERM_FWQADD = "QXGL080004";

    /** 异常编码 - OA系统维护中. */
    public static final String ERR_CODE_OA_WHZ = "QXGL090001";

    /** 异常编码 - 不存在得流程名称. */
    public static final String ERR_CODE_NOT_EXIST_PROC_NAME = "QXGL100001";


    /** 异常编号与描述集合. */
    private static final Map<String, String> errMap = new HashMap<String, String>();
    static {
        // 初始化系统定义的每个异常的编号和描述信息集合.
        errMap.put(COMM_ERR_CODE_NO_LOGIN, "操作人员未登录系统或Session过期，请重新登录！");
        errMap.put(COMM_ERR_CODE_NO_METHOD, "调用的业务方法名称不存在，请确认编写的代码是否有误");
        errMap.put(COMM_ERR_CODE_ILL_ACCESS, "调用的业务方法不能被访问，请确认是否有权限调用该方法");
        errMap.put(COMM_ERR_CODE_PDF_PRINT, "调用打印机打印PDF文件失败，请确认打印机是否开启");
        errMap.put(COMM_ERR_CODE_DB_ACCESS, "执行数据库操作失败");
        errMap.put(COMM_ERR_CODE_FAILD_DEFINE, "产生了未定义异常，请与系统管理员联系");
        errMap.put(COMM_ERR_CODE_FAILD_CODE_BM_PARAM, "生成编码时，请求参数不正确");
        errMap.put(COMM_ERR_CODE_CODE_BM_SERIAL, "生成编码时，获取不到正确的最大序列号值");
        errMap.put(COMM_ERR_MD5_ECRYPT, "调用MD5加密算法出错.");
        errMap.put(COMM_ERR_ECRYPT_FILE, "执行文件加密算法出错，加密文件路径为[{0}]，加密后文件路径为[{1}].");
        errMap.put(COMM_ERR_DECRYPT_FILE, "执行文件解密算法出错，解密文件路径为[{0}]，解密后文件路径为[{1}].");
        errMap.put(COMM_ERR_ECRYPT, "执行通用加密算法出错.");
        errMap.put(COMM_ERR_DECRYPT, "执行通用解密算法出错");
        errMap.put(COMM_ERR_GZTFWQ_NOT_EXISTS, "工作子系统未配置统一工作平台信息，请与系统管理员联系.");
        errMap.put(COMM_ERR_XSLT_TRANSFORM, " 对XML文件进行XSLT转换出错，转换的文件路径为：{0}");
        errMap.put(COMM_ERR_XSD_VALIDATE, " 对XML文件进行XSD校验出错，校验的文件路径为：{0}");
        errMap.put(COMM_ERR_XSD_VALIDATE_ERRS, " XML文件{0}未通过XSD校验，错误信息为：{1}");
        errMap.put(COMM_ERR_FAILED_TREE, "不能正确构建树结构，树形结构数据不正确.");
        errMap.put(COMM_ERR_FAILED_DIR, "指定的目录[{0}]是一个文件，不是有效的目录.");
        errMap.put(COMM_ERR_FAILED_CREATE_DIR, "不能创建目录[{0}]，请确认系统资源是否用尽.");
        errMap.put(COMM_ERR_DOWNLOAD_FILE, "下载FTP文件[{0}]到[{1}]失败.");
        errMap.put(COMM_ERR_MEM_EXCEL_TEMP, "通过Excel模板文件[{0}]生成打印Excel文件失败.");
        errMap.put(COMM_ERR_WRITE_FILE, "写文件[{0}]内容失败.");
        errMap.put(COMM_ERR_READ_URL, "读取远程文件[{0}]内容失败.");
        errMap.put(COMM_ERR_READ_FILE, "读取文件[{0}]内容失败.");
        errMap.put(COMM_ERR_COPY_FILE, "将文件[{0}]复制到[{1}]失败.");
        errMap.put(COMM_ERR_ZIP_FILE, "对指定的文件进行压缩[{0}]处理失败.");
        errMap.put(COMM_ERR_DELETE_FILE, "对指定的文件进行删除[{0}]处理失败.");
        errMap.put(ERR_CODE_SCRY_TIMEOUT, "生产人员未登录系统或Session过期，请重新登录系统.");



        // 初始化系统定义的每个异常的编号和描述信息集合.
        errMap.put(ERR_CODE_INSERT_USER, "添加用户信息时失败");
        errMap.put(ERR_CODE_UPDATE_USER, "更新用户信息时失败");
        errMap.put(ERR_CODE_EXIST_OA, "OA账号:[{0}]已存在");
        errMap.put(ERR_CODE_OA_ALREADY_ADD, "OA账号:已添加");
        errMap.put(ERR_CODE_QUERY_USER, "通过用户编码:[{0}]找不到对应的用户信息");
        errMap.put(ERR_CODE_OAUSRE_NOT_CONFIG, "OA账号:[{0}]在后台管理系统中未配置");
        errMap.put(ERR_CODE_NOT_FOUND_IN_OA, "OA账号:[{0}]在OA信息中未找到");
        errMap.put(ERR_CODE_UPDATE_PASSWORD, "更新用户密码失败");
        errMap.put(ERR_CODE_NULL_OA, "OA账号为空");
        errMap.put(ERR_CODE_UPDATE_USER_INFO, "更新用户信息失败");


        errMap.put(ERR_CODE_INSERT_ROLE, "添加角色信息时失败");
        errMap.put(ERR_CODE_UPDATE_ROLE, "更新角色信息时失败");
        errMap.put(ERR_CODE_DELETE_ROLE, "删除角色信息时失败,角色编码:[{0}]");
        errMap.put(ERR_CODE_QUERY_ROLE, "查询角色信息时失败,角色编码:[{0}]");
        errMap.put(ERR_CODE_EXIST_ROLE_NAME, "此角色名称已存在,角色名称:[{0}]");
        errMap.put(ERR_CODE_NULL_ROLL_BM, "角色编码为空");
        errMap.put(ERR_CODE_ERROR_ROLL_BM, "角色编码不存在");
        errMap.put(ERR_CODE_NULL_ROLE_NAME, "角色名称为空");

        errMap.put(ERR_CODE_INSERT_ROLEMENU, "添加角色菜单信息时失败,角色菜单信息:[{0}]");
        errMap.put(ERR_CODE_DELETE_ROLEMENU, "删除角色菜单信息时失败,角色菜单信息:[{0}]");

        errMap.put(ERR_CODE_INSERT_MENU, "添加菜单信息时失败");
        errMap.put(ERR_CODE_UPDATE_MENU, "更新菜单信息时失败");
        errMap.put(ERR_CODE_DELETE_MENU, "删除菜单信息时失败,菜单编码:[{0}]");
        errMap.put(ERR_CODE_QUERY_MENU, "查询菜单信息时失败,菜单编码:[{0}]");
        errMap.put(ERR_CODE_EXIST_MENU_NAME, "菜单名称:[{0}]已存在");
        errMap.put(ERR_CODE_NOT_EXIST_MENU_NAME, "菜单名称:[{0}]不存在");
        errMap.put(ERR_CODE_NULL_MENU_NAME, "菜单名称为空");
        errMap.put(ERR_CODE_REPEAT_MENU_BM, "菜单编码重复");
        errMap.put(ERR_CODE_NULL_MENU_BM, "菜单编码为空");

        errMap.put(ERR_CODE_NOT_EXIST_LOGIN_NAME, "用户名[{0}]不存在");
        errMap.put(ERR_CODE_NOT_CORRECT_PASSWORD, "用户名和密码不一致");
        errMap.put(ERR_CODE_NULL_LOGIN_NAME, "用户名为空");
        errMap.put(ERR_CODE_NULL_PASSWORD, "密码为空");

        errMap.put(ERR_CODE_SEND_EMAIL, "发送邮件失败:[{0}]");
        errMap.put(ERR_CODE_NO_PERM, "用户:[{0}],没有[{1}]权限");

        errMap.put(ERR_CODE_ADD_USERROLE, "添加用户角色失败");
        errMap.put(ERR_CODE_NULL_ROLEBM, "未选择角色信息");


        errMap.put(ERR_CODE_QUERY_CONFIG_BY_KEY, "通过key:[{0}]查询配置信息失败");
        errMap.put(ERR_CODE_UPDATE_CONFIG, "通过key:[{0}]更新配置信息失败");
        errMap.put(ERR_CODE_QUERY_FWQADD_BY_ADD, "通过地址:[{0}]查询服务器地址信息失败");
        errMap.put(ERR_CODE_NOT_PERM_FWQADD, "此地址:[{0}]无发送邮件权限");


        errMap.put(ERR_CODE_OA_WHZ, "OA系统维护中");

        errMap.put(ERR_CODE_NOT_EXIST_PROC_NAME, "不存在得流程名称[{0}]");
    }


    /**
     * 抛出异常信息.
     *
     * @param errCode 异常信息代码
     * @param params 异常信息描述中动态填充部分.
     */
    public static String getErrMsg(String errCode, Object... params) {
        // 构建业务层异常信息，并往外层抛出.
      //  String errMsg = getErrMsg(errCode, params);
        String errMsg = errMap.get(errCode);
        if (params.length > 0) {
            // 需要动态填充异常消息内容.
            errMsg = MessageFormat.format(errMsg, params);
        }
        errMsg= errMsg==null?errCode:errMsg;
        return errMsg;
    }

    /**
     * 私有构造函数，防止对象被实例化.
     */
    private GlobalExceptionDatas() {

    }


}
